import { ref } from 'vue'
import { defineStore } from 'pinia'

// 定义tab数据模块
export const useTabStore = defineStore('tab', () => {
    // 这个ts中定义navs数据
    let navs = ref([
        // {
        //     name: "用户管理",
        //     path: "/URL",
        //     id: 1
        // }
    ])

    // 定义索引值
    let index = ref(0)

    // 设置索引值的方法
    const changeIndex = (current: number) => {
        index.value = current;
    }

    // 定义添加导航的方法
    const add = (option: any) => {
        let current;
        // some() 是 JavaScript 数组的一个方法，用于测试数组中是否至少有一个元素满足提供的测试函数，有则返回 true，否则返回 false。
        let isHas = navs.value.some((item: any, i: number) => {
            if (item.name == option.name) {
                current = i;
            }
            return item.name == option.name
        })

        if (!isHas) {
            navs.value.push(option);
            index.value = navs.value.length - 1;
        }
        else {
            if (current != undefined) {
                changeIndex(current);
            }
        }
    }

    // 定义删除导航的方法
    const remove = (index: number) => {
        navs.value.splice(index, 1);
        if ((index - 1) >= 0) {
            changeIndex(index - 1);
        }
        if (navs.value.length == 0) {
            changeIndex(0);
        }

    }

    // 定义清空导航的方法
    const empty = () => {
        // 清空顶部导航栏
        navs.value = [];
    }

    // 把数据和方法暴露出去给vue组件去使用
    return {
        navs,
        index,
        add,
        remove,
        changeIndex,
        empty
    }
})